#include <iostream>
#include <cstring>
using namespace std;

#define MAX_N 1000000
char s[MAX_N + 5], t[MAX_N + 5];

// 初始化指针 i 为 0，j 为 1；初始化匹配长度 k 为 0
// 比较第 k 位的大小，根据比较结果跳转相应指针。
// 若跳转后两个指针相同，则随意选一个加一以保证比较的两个字符串不同
// 重复上述过程，直到比较结束
// 答案为 i,j 中较小的一个

int minimalRotation(char* s){
    int n = strlen(s);
    int k = 0, i = 0, j = 1;
    while (k < n && i < n && j < n) {
    if (s[(i + k) % n] == s[(j + k) % n]) {
        k++;
    } else {
        s[(i + k) % n] > s[(j + k) % n] ? i = i + k + 1 : j = j + k + 1;
        if (i == j) i++;
        k = 0;
    }
    }
    return i = min(i, j);
}

int main() {
    int s_min, t_min;
    scanf("%s%s", s, t);
    s_min = minimalRotation(s);
    t_min = minimalRotation(t);
    int flag = 1;
    for (int i = s_min, j = t_min, n = 0, N = strlen(s); n < N; n++) {
        if (s[(i + n) % N] == t[(j + n) % N]) continue;
        flag = 0;
        break;
    }
    if (flag) {
        printf("Yes\n");
        for (int i = s_min, n = 0, N = strlen(s); n < N; n++) {
            printf("%c", s[(i + n) % N]);
        }
        printf("\n");
    } else {
        printf("No\n");
    }
    return 0;
}